﻿Imports Persistencia
Public Class ctrAgenda
    Inherits ctrPadrao
#Region "Variáveis"
    Private prvIDContatoAgendado As Int32

    Private objAgendamento As New perCadContato
    Private objCliente As New perCliente
    Private objConfiguracoes As New ctrConfiguracoes
#End Region
#Region "Enumerações"
    Public Enum eTipoCadastro As Byte
        eInserir = 0
        eEditar = 1
    End Enum

#End Region

#Region "Métodos"
    Public Function SalvarContatoAgendado(ByVal iIDContatoAgendado As Int32, ByVal iIDCliente As Int32, _
                                           ByVal iIDContato As Int32, ByVal iIDUsuario As Int32, _
                                           ByVal sObservacoes As String, ByVal dtData As Date, ByVal sHora As String) As Boolean
        Dim bResultado As Boolean = False
        Dim iDiasContatoConfig As Int32
        Dim iDiasContato As Int32
        Dim sMsg As String
        Try
            iDiasContatoConfig = objConfiguracoes.RetornaConfiguracoes("limiteContatos").Item("limiteContatos")
            iDiasContato = RetornaContatosPorDia(dtData)

            If (iDiasContatoConfig > 0 And iDiasContato >= iDiasContatoConfig) Then
                sMsg = " O limite de contatos para este dia foi atingido."
                sMsg &= " Deseja continuar? "
                If (MsgBox(sMsg, MsgBoxStyle.YesNo, "Atenção") = MsgBoxResult.No) Then
                    Exit Function
                End If
            End If

            MyBase.iniciarControleTransacional()
            objAgendamento.TransacaoOrigem = MyBase.ControleTransacional

            If (iIDContatoAgendado > 0) Then
                Me.objAgendamento.AlterarContatoAgendado(iIDContatoAgendado, iIDCliente, iIDContato, dtData, sHora, sObservacoes)
                bResultado = True
            Else
                prvIDContatoAgendado = Me.objAgendamento.InserirContatoAgendado(iIDCliente, iIDContato, dtData, sHora, sObservacoes, iIDUsuario)
                bResultado = True
            End If

            If (bResultado) Then
                objCliente.AtualizaDataProximoContato(iIDCliente, dtData)
            End If

        Catch ex As Exception
            Throw New Exception("Exceção no método 'inserirOcorrencia'. " & Environment.NewLine & Environment.NewLine & ex.Message)
        Finally
            If bResultado Then
                MyBase.finalizarControleTransacional(Persistencia.perPadrao.eFinalizacaoTransacao.Commit)
            Else
                MyBase.finalizarControleTransacional(Persistencia.perPadrao.eFinalizacaoTransacao.Rollback)
            End If

            Me.objAgendamento.TransacaoOrigem = Nothing
        End Try
        Return bResultado

    End Function
    Public Function RetornaContatosPorDia(ByVal dtData As Date) As Int32

        Try
            Return objAgendamento.NumeroContatosDia(dtData)
        Catch ex As Exception
            Throw New Exception("TextoExcecao" & Environment.NewLine & Environment.NewLine & ex.Message)
        End Try

    End Function
    Public Function SugerirData(ByVal dtDataBase As Date) As Date
        Dim ContatosDia As Int32
        Dim LimiteContatos As Int32

        Try
            LimiteContatos = objConfiguracoes.RetornaConfiguracoes("limiteContatos").Item("limiteContatos")
            ContatosDia = RetornaContatosPorDia(dtDataBase)
            If (ContatosDia > 0) Then
                While (ContatosDia >= LimiteContatos)
                    dtDataBase = DateAdd("d", 1, dtDataBase)
                    While Not VerificaSeDiaUtil(dtDataBase)
                        dtDataBase = DateAdd("d", 1, dtDataBase)
                    End While
                    ContatosDia = RetornaContatosPorDia(dtDataBase)
                End While
            Else
                MsgBox("Número de contatos diários não foi definido. " & vbCrLf & "Não será possível sugerir data para contato.", MsgBoxStyle.Information, "Sugerir Data")
            End If

            Return dtDataBase

        Catch ex As Exception
            Throw New Exception("TextoExcecao" & Environment.NewLine & Environment.NewLine & ex.Message)
        End Try

    End Function
#End Region
End Class
